﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace GUI
{
    public partial class ThemVe : Form
    {
        private string maNV;
        public ThemVe(string manv)
        {
            maNV = manv;
            InitializeComponent();
            List<ChuyenBay_DTO> cb_list = ChuyenBay_BUS.layDanhSachChuyenBayDangMoLich();
            for (int i = 0; i < cb_list.Count; i++)
            {
                comboBox_maCB.Items.Add(cb_list[i].maCB);
            }
        }

        private bool kiemTraChuoiSo(string chuoiSo)
        {
            foreach (char c in chuoiSo)
            {
                if (!(c >= '0' && c <= '9'))
                    return false;
            }
            return true;
        }

        private void Button_ThemVe_Click(object sender, EventArgs e)
        {
            //1.Kiểm tra mã vé có là chuỗi rỗng hay không?
            //ràng buộc của mã vé chỉ bao gồm số và char(5)
            if ((TextBox_MaVe.Text.Trim() == "") ||(TextBox_MaVe.Text.Trim().Length !=5) ||(kiemTraChuoiSo(TextBox_MaVe.Text.Trim()) == false) )
            {
                MessageBox.Show("Mã vé không hợp lê. Mời bạn nhập lại!");
                return;
            }
            

            ////2.Kiểm tra mã chuyến bay có là chuỗi rỗng hay không?
            //if (TextBox_MaChuyenBay.Text.Trim() == "")
            //    MessageBox.Show("Xin vui lòng nhập mã chuyến bay!");
            // else count++;

            //3.Kiểm tra mã hành khách có là chuỗi rỗng hay không?
            if ((TextBox_MaHanhKhach.Text.Trim() == "") || (TextBox_MaHanhKhach.Text.Trim().Length != 5) || (kiemTraChuoiSo(TextBox_MaHanhKhach.Text.Trim()) == false))
            {
                MessageBox.Show("Mã hành khách không hợp lệ. Mời bạn nhập lại!");
                return;
            }
            

            //4.Kiểm tra họ tên hành khách có là chuỗi rỗng hay không?
            if (TextBox_HoTen.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng nhập họ tên hành khách!");
                return;
            }
           

            //5.Kiểm tra CMND có là chuỗi rỗng hay không?
            //va có chữ hay k
            if ((TextBox_CMND.Text.Trim() == "") || (kiemTraChuoiSo(TextBox_CMND.Text.Trim()) == false))
            {
                MessageBox.Show("Mã số Chứng minh nhân dân không hợp lệ. Mời bạn nhập lại!");
                return;
            }
            

            //6.Kiểm tra quốc tịch có là chuỗi rỗng hay không?
            if (TextBox_QuocTich.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng nhập quốc tịch của hành khách!");
                return;
            }
           
            //không bắt buộc passport

            //7.Kiểm tra Passport có là chuỗi rỗng hay không?
            //if (TextBox_Passport.Text.Trim() == "")
            //{
            //    MessageBox.Show("Xin vui lòng nhập passport hành khách!");
            //    return;
            //}
            

            //8.Kiểm tra địa chỉ có là chuỗi rỗng hay không?
            if (TextBox_DiaChi.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng nhập địa chỉ hành khách!");
                return;
            }
            

            //9.Kiểm tra có chọn giới tính chưa?
            if (RadioButton_Nam.Checked == false && RadioButton_Nu.Checked == false)
            {
                MessageBox.Show("Xin vui lòng chọn giới tính nam hay nữ!");
                return;
            }
            

            //10.Kiểm tra có chọn hạng vé chưa?
            if (RadioButton_Hang1.Checked == false && RadioButton_Hang2.Checked == false)
            {
                MessageBox.Show("Xin vui lòng chọn vé hạng 1 hay 2!");
                return;
            }
            

            //11.Kiểm tra có chọn loại vé đặt hay vé mua chưa?
            if (RadioButton_Dat.Checked == false && RadioButton_Mua.Checked == false)
            {
                MessageBox.Show("Xin vui lòng chọn vé đặt hay vé mua!");
                return;
            }
            

            //12.Kiểm tra ngày đến có bé hơn ngày đi hay không?
            if (DateTimePicker_NgayDi.Value > DateTimePicker_NgayDen.Value)
            {
                MessageBox.Show("Xin vui lòng chọn lại ngày đi và ngày đến!");
                return;
            }
            

            
            //Tìm để lấy ra mã lịch bay
            string maLB = String.Empty;
            List<LichBay_DTO> lichBay = new List<LichBay_DTO>();
            lichBay = LichBay_BUS.layDanhSachLichBay();
            bool temp = true;
            for (int i = 0; i < lichBay.Count; i++)
            {
                
                if ((lichBay[i].ngayDi.Date.CompareTo(DateTimePicker_NgayDi.Value.Date) ==0) && (lichBay[i].ngayDen.Date.CompareTo(DateTimePicker_NgayDen.Value.Date) ==0) && (string.Compare(lichBay[i].maCB, comboBox_maCB.SelectedItem.ToString()) == 0))
                {
                    maLB = lichBay[i].maLB;
                    temp = true;
                    break;
                }
                else
                    temp = false;
            }
            if (temp == false)
            {
                MessageBox.Show("Vui lòng kiểm tra lại thông tin ngày đi ngày đến và mã chuyến bay!");
                return;
            }

            //13.Kiểm tra STT ghế có được ghi hay chưa trong mã LB có ở trên
            if (TextBox_STTGhe.Text.Trim() == "")
            {
                MessageBox.Show("Xin vui lòng nhập số thứ tự ghế!");
                return;
            }
            else
            {
                //kiểm tra số thứ tự ghế có hợp lệ k
                List<Ve_DTO> ve1 = new List<Ve_DTO>();
                ve1 = Ve_BUS.layVeTheoMaLB(maLB);
                int count = 0;
                for (int i = 0; i < ve1.Count; i++)
                {
                    if (ve1[i].SttGhe != Convert.ToInt32(TextBox_STTGhe.Text.Trim()))
                        count++;
                }
                if (count == ve1.Count - 1)
                {
                    MessageBox.Show("Xin vui lòng chọn số thứ tự ghế khác! Ghế này đã có hành khách!");
                    return;
                }
                    
            }

            
                //NhanVien_DTO nhanVien = new NhanVien_DTO();
                //sau khi các thông tin trên đã xác định đúng thì thực hiện thêm vé

                int ngay, thang, nam;
                //Lấy thông tin về vé cần thêm 
                Ve_DTO ve = new Ve_DTO();
                ve.MaVe = TextBox_MaVe.Text.Trim();
                ve.MaNV = maNV; //gán mã nv cho vé bằng thuộc tính maNV của màn hình
                ve.MaLB = maLB;
                ve.MaHK = TextBox_MaHanhKhach.Text.Trim();
                ve.SttGhe = Convert.ToInt32(TextBox_STTGhe.Text.Trim());
                ve.NgayLap = DateTime.Now;

                //Hạng vé: hạng 1-true, hạng 2-false
                if (RadioButton_Hang1.Checked == true)
                    ve.HangVe = true; //vé hạng 1
                else
                    ve.HangVe = false; //vé hạng 2

                //Loại vé: mua-true, đặt-false
                if (RadioButton_Mua.Checked == true)
                    ve.LoaiVe = true;
                if (RadioButton_Dat.Checked == true)
                    ve.LoaiVe = false;

                   

                //Lấy thông tin hành khách
                HanhKhach_DTO hanhKhach = new HanhKhach_DTO();
                hanhKhach.MaHK = TextBox_MaHanhKhach.Text.Trim();
                hanhKhach.HoTen = TextBox_HoTen.Text.Trim();
                //Giới tính nam: true, nữ false
                if (RadioButton_Nam.Checked == true)
                    hanhKhach.GioiTinh = true;
                if (RadioButton_Nu.Checked == true)
                    hanhKhach.GioiTinh = false;
                hanhKhach.CMND = TextBox_CMND.Text.Trim();
                hanhKhach.QuocTich = TextBox_QuocTich.Text.Trim();
                hanhKhach.Passport = TextBox_Passport.Text.Trim();
                hanhKhach.DiaChi = TextBox_DiaChi.Text.Trim();
                hanhKhach.DienThoai = TextBox_DienThoai.Text.Trim();

                //phải thêm hành khách trước khi thêm vé vì có ràng buộc khóa ngoại
                int res_ThemHK = HanhKhach_BUS.themHanhKhach(hanhKhach);
                int res_ThemVe = 0;
                switch (res_ThemHK)
                {
                    case 0:
                        {
                            MessageBox.Show("Thêm hành khách thất bại");
                            return;
                        }
                    case 1:
                        {
                            res_ThemVe = Ve_BUS.themVe(ve);
                            break;
                        }
                    case 2:
                        {
                            MessageBox.Show("Mã hành khách này đã tồn tại");
                            return;
                        }
                }

                switch (res_ThemVe)
                {
                        //khi thêm thất bại thì phải xóa hành khách đã thêm vào bên trên
                    case 0:
                        {
                            MessageBox.Show("Thêm vé thất bại!");
                            HanhKhach_BUS.xoaHanhKhach(hanhKhach);
                            return;
                        }
                    case 1:
                        {
                            MessageBox.Show("Thêm vé thành công!");
                            return;
                        }
                    case 2:
                        {
                            MessageBox.Show("Mã vé này đã tồn tại. Mời bạn nhập lại!");
                            HanhKhach_BUS.xoaHanhKhach(hanhKhach);
                            return;
                        }
                    case 3:
                        {
                            MessageBox.Show("Đã quá hạn đặt vé đối với chuyến bay này");
                            return;
                        }
                }
                               
            
        }

        private void ThemVe_Load(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
